﻿using System.Collections.Generic;
using UniRx;
using UnityEngine;

public class PlayerAttributeComp : AttributeCompAbs
{
    protected override SerializableDic<AttributeType, float> InitGrowthRates()
    {
        return new SerializableDic<AttributeType, float>()
        {
            { AttributeType.MaxHP, 50f }, // 每级增加50点生命
            { AttributeType.MaxMP, 30f }, // 每级增加30点魔法
            { AttributeType.Attack, 5f }, // 每级增加5点攻击
            { AttributeType.Defense, 3f }, // 每级增加3点防御
            { AttributeType.Speed, 1f }, // 每级增加1点速度
            { AttributeType.CritRate, 0.002f }, // 每级增加0.2%暴击
            { AttributeType.CritDamage, 0.01f } // 每级增加1%暴伤
        };
    }

    private CompositeDisposable disposables = new CompositeDisposable();
    public float currentHp;
    public float currentMp;


    private void Start()
    {
        base.Start();
        currentHp = GetAttributeValue(AttributeType.MaxHP);
        currentMp = GetAttributeValue(AttributeType.MaxMP);

        //监听等级变化 更新属性
        RxEventBus.Subscribe<LevelChangeEvent>()
            .Subscribe(e =>
            {
                {
                    SetLevel(e.newValue);
                    currentHp = GetAttributeValue(AttributeType.MaxHP);
                    currentMp = GetAttributeValue(AttributeType.MaxMP);
                }
            })
            .AddTo(disposables); // 自动管理订阅生命周期
        // 监听属性变化 打印日志
        RxEventBus.Subscribe<AttributeChangeEvent>()
            .Subscribe(e => Debug.Log(e.type + " 变化 " + e.oldValue + " -> " + e.newValue))
            .AddTo(disposables); // 自动管理订阅生命周期
    }


    private void OnDestroy()
    {
        // 释放所有订阅
        disposables.Dispose();
    }
}